﻿/* ***** BEGIN LICENSE BLOCK *****
 *   Version: MPL 1.1/GPL 2.0/LGPL 2.1
 *
 * The contents of this file are subject to the Mozilla Public License Version
 * 1.1 (the "License"); you may not use this file except in compliance with
 * the License. You may obtain a copy of the License at
 * http://www.mozilla.org/MPL/
 * 
 * Software distributed under the License is distributed on an "AS IS" basis,
 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
 * for the specific language governing rights and limitations under the
 * License.
 *
 * The Original Code is Меню форума Vingrad.
 *
 * The Initial Developer of the Original Code is
 * Jefim Borissov.
 * Portions created by the Initial Developer are Copyright (C) 2006
 * the Initial Developer. All Rights Reserved.
 *
 * Contributor (s):
 * Daniel Abramov
 *
 * Alternatively, the contents of this file may be used under the terms of
 * either the GNU General Public License Version 2 or later (the "GPL"), or
 * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
 * in which case the provisions of the GPL or the LGPL are applicable instead
 * of those above. If you wish to allow use of your version of this file only
 * under the terms of either the GPL or the LGPL, and not to allow others to
 * use your version of this file under the terms of the MPL, indicate your
 * decision by deleting the provisions above and replace them with the notice
 * and other provisions required by the GPL or the LGPL. If you do not delete
 * the provisions above, a recipient may use your version of this file under
 * the terms of any one of the MPL, the GPL or the LGPL.
 * 
 * ***** END LICENSE BLOCK ***** */


// настройки и константы 
var settings =
{
  // Открывать ли странички в новой вкладке?
  openInNewTab: function () {
  	return this.getPref (0, "openinnewtab");
  },
  // Уточнять ли текст ссылки при вызове "Копировать ссылку для форума Vingrad"
  refineCopyVingradUrlText: function () {
        return this.getPref (0, "contextmenu.copyvingradurl.refinetext");
  },
  // поисковая система по умолчанию (точнее, последняя выбранная)
  getDefaultSE: function () {
  	return this.getPref (1, "searchengines.default");
  },   
  setDefaultSE: function (value) {
  	return this.setPref (1, "searchengines.default", value);
  },
  // URL списка форумов
  getForumListUrl: function () {   
    // пока что возвращаем наш файл
    // ближе к релизу - грузим и кешируем forum.vingrad.ru/stat_files/forums.xml
    return "chrome://vingradmenu/content/forums.xml";
  },
  // URL xsl-я для списка форумов 
  getForumListXslUrl: function () {
    // XSL для преобразования списка форумов в наш родной зул
    return "chrome://vingradmenu/content/forums.xsl";
  },  
  // URl списка поисковых систем
  getSEListUrl: function () {
    return "chrome://vingradmenu/content/searchengines.xml";
  }, 
  // URL xsl-я для списка поисковых систем
  getSEListXslUrl: function () {
    // XSL для списка поисковых систем
    return "chrome://vingradmenu/content/searchengines.xsl";
  },
  // URL списка избранных тем (!!! при изменении также менять favTopicsManager.serializeTopics ()!!!)
  getFavTopicListUrl: function () {
    return "chrome://vingradmenu/content/favtopics.xml";
  },
  // URL xsl-я для списка избранных тем
  getFavTopicListXslUrl: function () {
    return "chrome://vingradmenu/content/favtopics.xsl";
  },
  // URL поиска по форуму (TODO: по кастрации navigator.search() убрать)
  getForumSearchQueryUrl: function (q) {
    return "http://forum.vingrad.ru/index.php?act=Search&CODE=01&forums=all&keywords=" + q;
  },
  // URL поиска по вике (TODO: по кастрации navigator.search() убрать)
  getWikiSearchQueryUrl: function (q) {
    return "http://wiki.vingrad.ru/Special:Search/" + q;
  },
  // URL форума или подфорума
  getForumUrl: function (id) {
    return (id == null) ? "http://forum.vingrad.ru/index.php": "http://forum.vingrad.ru/forum-" + id + ".html";  
  },
  // URL топика
  getTopicUrl: function (id) {
    return "http://forum.vingrad.ru/topic-" + id + "/view-getnewpost.html";
  },  
  // мои новые
  getMyNewMessagesUrl: function () {
    return "http://forum.vingrad.ru/index.php?act=Search&CODE=getmynew";
  },
  // новые 
  getNewMessagesUrl: function () {
    return "http://forum.vingrad.ru/index.php?act=Search&CODE=getnew";
  },
  // профиль
  getProfileUrl: function () {
    return "http://forum.vingrad.ru/index.php?act=UserCP&CODE=00";
  },
  // PMки
  getPersonalMessagesUrl: function () {
    return "http://forum.vingrad.ru/index.php?act=Msg&CODE=01";
  },
  // URL страницы поиска
  getSearchUrl: function () {
    return "http://forum.vingrad.ru/index.php?act=Search";
  },
  // URL статьи вики
  getWikiUrl: function (article) {
    return "http://wiki.vingrad.ru/" + article;
  },
  // URL фака
  getFaqUrl: function () {
    return "http://forum.vingrad.ru/vingrad-faq/index.html";
  },
  // базовый урл для разных режимов навигации
  getBasicNavUrl: function (type) {
    return "http://forum.vingrad.ru/" + type + "/index.html";
  },
  getNavLinkUrl: function (type) {
    var link = content.document.getElementById("nav_" + type);
    return (link != null) ? link.href : this.getBasicNavUrl (type);
  },
  getNavFaqUrl: function () {
    return this.getNavLinkUrl ("faq");
  },
  getNavNewsUrl: function () {
    return this.getNavLinkUrl ("news");
  },
  getNavArticlesUrl: function () {
    return this.getNavLinkUrl ("articles");
  },
  getNavSourcesUrl: function () {
    return this.getNavLinkUrl ("sources");
  },
  getNavForumUrl: function () {
    return this.getNavLinkUrl ("forum");
  },
  getNavBooksUrl: function () {
    return this.getNavLinkUrl ("books");
  },
  // RSS
  getNewsRssUrl: function () {
    return "http://news.vingrad.ru/index.xml";
  },
  getRssXslUrl: function () {
    return "chrome://vingradmenu/content/rss.xsl";
  },
  // интервал обновления (милисеки)
  getRssRefreshInterval: function () {
    var interval =  this.getPref (2, "rss.refreshinterval");
    if (interval < 60000) {
        interval = 60000;
        this.setPref (2, "rss.refreshinterval", interval);
    }
    return interval;
  },
  // Сколько раз форум был посещён
  getForumVisitsCount: function (id) {
    return this.getPref (2, "forums." + id + ".visits");
  },
  // ask - спрашивать
  // add - добавлять
  // noask - не предлагать добавлять
  addFavTopicDefaultBehavior: function () {
    var behavior =  this.getPref (1, "favtopics.autoaddbehavior");
    if (behavior == "" || behavior == null) {
        this.setPref (1, "favtopics.autoaddbehavior", "ask");
        behavior = "ask";
    }
    return behavior;
  },
  // Сколько раз топик был посещён
  getTopicVisitsCount: function (id) {
    return this.getPref (2, "topics." + id + ".visits");
  },
  setIgnoreTopicVisits: function (id) {
    this.setPref (0, "topics." + id + ".ignore", true);
  },
  getIgnoreTopicVisits: function (id) {
    return this.getPref (0, "topics." + id + ".ignore");
  },
  // Увеличить счётчик посещений форума
  incrementForumVisitsCount: function (id) {
    this.setPref (2, "forums." + id + ".visits", this.getForumVisitsCount (id) + 1);
  },
  // Увеличить счётчик посещений топика
  incrementTopicVisitsCount: function (id) {
    this.setPref (2, "topics." + id + ".visits", this.getTopicVisitsCount (id) + 1);
  },
  // Массив данных о кликах форумов вида ...[id форума] = количество кликов
  getForumVisits: function() {
    var ret = new Array();
    try {
        var branch = utils.getPrefsBranch().getChildList("forums", {}); // получаем список всех подветвей ветви vingradmenu.forums
    } catch (e) {
        return ret;
    }
    if (branch == null || branch.length == 0) return ret;
    var forum = null;
    for (i = 0; i < branch.length; i++) {
	forum = branch[i];
        ret[forum.substring(7, forum.length - 7)] = this.getPref (2, forum); // выдираем id форума - например, forums.ID.visits => ID
    }
    return ret;
  },
  // прочесть настройку
  // type: 0 - bool
  //       1 - char
  // 	   2 - int
  getPref: function (type, name)
  {
    var val = null;
    try {
        if (type == 0)
            val = utils.getPrefsBranch().getBoolPref (name); 
        else if (type == 1)
            val = utils.getPrefsBranch().getCharPref (name);
	else if (type == 2)
            val = utils.getPrefsBranch().getIntPref (name); 
    } catch (e) { // если настройки нет - создать
        if (type == 0) {  
            this.setPref (name, false);
            val = false;
        } else if (type == 1) { 
            this.setPref (name, "");
            val = "";
        } else if (type == 2) {
            val = 0;
        }
    }
    return val;
  }, 
  // установить настройку 
  // type: 0 - bool
  //       1 - char
  // 	   2 - int
  setPref: function (type, name, value)
  {
    if (type == 0)
        utils.getPrefsBranch().setBoolPref (name, value); 
    else if (type == 1)
        utils.getPrefsBranch().setCharPref (name, value); 
    else if (type == 2)
        utils.getPrefsBranch().setIntPref (name, value); 
  }
}
